package com.nettyAdvanced.p4_nettyDecoder;

import io.netty.buffer.ByteBuf;
import io.netty.buffer.ByteBufAllocator;
import io.netty.channel.embedded.EmbeddedChannel;
import io.netty.handler.codec.LengthFieldBasedFrameDecoder;
import io.netty.handler.logging.LogLevel;
import io.netty.handler.logging.LoggingHandler;

/**
 * @author： pang-yun
 * @date： 2021-09-15 14:33
 * 功能目的 ：用于 测验 netty 中 lengthFieldDecoder  消息解析器
 */

public class LengthFieldDecoderDemo {
    public static void main(String[] args) {
        EmbeddedChannel embeddedChannel = new EmbeddedChannel(
                //maxFrameLength    发送数据包最大长度
                // lengthFieldOffest  长度域偏移量  即找到 长度域在哪里
                // lengthFieldLength  长度域 自己的长度
                //  lengthAdjustment  调整 避开其他的有效数据
                //  initalBytesToStrip   丢弃前面有效数位的 数据
                new LengthFieldBasedFrameDecoder(1024,0,4,1,5),
                new LoggingHandler(LogLevel.INFO)
        );

        ByteBuf byteBuf = ByteBufAllocator.DEFAULT.buffer();
        send(byteBuf,"Hello, World");
        send(byteBuf,"Hello, I am Pang");
        send(byteBuf,"Hello, Sunshine");

        embeddedChannel.writeInbound(byteBuf);

    }

    public static void send(ByteBuf buf,String content){
        byte[] bytes = content.getBytes();  // 实际内容
        int length = bytes.length;        // 实际内容长度   int 类型占四个字节
        buf.writeInt(length);
        buf.writeByte(1);
        buf.writeBytes(bytes);
    }
}
